#ifndef __REGISTER_H__
#define __REGISTER_H__
#include <malloc.h>
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <error.h>
#include <string.h>
#include <wxx.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <time.h>
#include <sys/types.h>
#include <semaphore.h>
#include <sys/stat.h>
#include <sys/errno.h>
#include <dirent.h>
#define REGISTER 1
#define DENGLU 2
#define SEEKPWD 3
#define TUICHU 4
#define QUNLIAO 5
#define DANLIAO 6
#define JIAQUN 7
#define QUNMSG 8
#define APPLY 9
#define REQUEST 10
#define REFUSE 11
#define AGREE 12
#define NOBODY 13
#define HAOYOU 14
#define UEXIT 15
#define XIUGAI 16
#define ZHUXIAO 17
#define DONGTAI 18
#define JIRU 19
#define CSFILE 20
#define CHUAN 21
#define SHOU 22

void dongHua();
void registerUser(int sd, struct sockaddr_in *addr);
void seekPwd(int sd, struct sockaddr_in *addr);
void deletePwd(int sd, struct sockaddr_in *addr);
void exitSys(int sd, struct sockaddr_in *addr);
void dengluUser(int sd, struct sockaddr_in *addr);
void next_menu(int sd, struct sockaddr_in *addr);
void changePwd(int sd, struct sockaddr_in *addr);
void *work(void *p);
// 消息载体结构体
typedef struct package
{
    char msgType;        // 消息类型
    char msgBlock[1024]; // 消息内容载体
} package;

// 注册结构体
typedef struct zhuce
{
    char name[128];
    char tel[128];
    char pwd[128];
} zhuce;

// 登入结构体
typedef struct denglu
{
    char name[128];
    char pwd[128];
} denglu;

// 找回密码结构体
typedef struct mima
{
    char name[128];
    char tel[128];
} mima;

typedef struct newPwd
{
    char name[128];
    char opwd[128];
    char npwd[128];
} newPwd;
// 单聊结构体
typedef struct ptalk
{
    int flag;
    char srcname[128]; // 自己名字
    char desname[128]; // 目标名字
    char text[256];    // 聊天内容
} ptalk;

// 群聊结构体
typedef struct mtalk
{
    char type;
    char name[128]; // 自己名字
    char text[256]; // 内容
} mtalk;

// 将用户的地址信息和名字绑定起来，便用服务器通过名字转发消息
typedef struct userAddrInfo
{
    char name[128];
    struct sockaddr_in addr;
} userAddrInfo;

typedef struct friendApr
{
    char type;
    char myname[128];  // 自己名字
    char hisname[128]; // 要添加好友的名字
} friendApr;

// 还可以保存其他消息
typedef struct friend
{
    char name[40]; // 好友名字
    char time[40];
}
friend;

typedef struct friendState
{
    char name[40];   // 名字
    char isLine[10]; // 受否在线
} friendState;

typedef struct friendList
{
    char name[128];        // 谁的好友列表
    friendState flist[15]; // 好友列表,由于数据包大小原因，目前只设置最多15个好友
    int num;               // 好友数量
} friendList;

typedef struct pyq
{
    char name[40];  // 谁发的
    char time[40];  // 什么时候发的
    char text[256]; // 发了什么
    int flag;       // 0代表发朋友圈，1代表看朋友圈，2代表最后一条朋友圈
} pyq;

typedef struct ltjr
{
    char time[30];  // 什么时候
    char name[20];  // 谁说的
    char text[256]; // 说了什么
} ltjr;
// 用户进程发送消息的地址结构体

typedef struct opjr
{
    int flag;         // 0代表清空，1代表查看
    int isOK;         // 0代表没有，1代表完成
    char desname[20]; // 谁要看
    char srcname[20]; // 看谁的
    ltjr lt;          // 一条聊天记录
} opjr;

typedef struct fileBlock
{
    int isOK;       // 1表示传完了
    int bytes;      // 文件块大小
    char text[800]; // 文件快内容
} fileBlock;

typedef struct chuanShou
{
    char type; // 传还是收文件
    char filename[100];
    char desname[20]; // 发给谁
    char srcname[20]; // 谁发的
    fileBlock data;
} chuanShou;

typedef struct workAddr
{
    int fd;
    struct sockaddr_in addr;
} workAddr;
#endif